home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-10-28 | 30.6 KB | 1,814 lines |
- »·······T·······T·······T·······T·······T·······T·······T·······T·······T·····T
-
- INCDIR EXTERNASM:
- INCLUDE EXTERNASSEMBLER.I
-
- Q ASMHEAD ASM,DISASM,ENDOFASM,z80,"Z80-ASSEMBLER V1.0, DONE BY DEFTRONIC"
-
- ASM DR.W CHK68000 ;@
- DR.W CHARA+02 ;A
- DR.W CHARB+04 ;B
- DR.W CHARC+06 ;C
- DR.W CHARD+08 ;D
- DR.W CHARE+10 ;E
- DR.W CHK68000+12 ;F
- DR.W CHK68000+14 ;G
- DR.W CHARH+16 ;H
- DR.W CHARI+18 ;I
- DR.W CHARJ+20 ;J
- DR.W CHARK+22 ;K
- DR.W CHARL+24 ;L
- DR.W CHARM+26 ;M
- DR.W CHARN+28 ;N
- DR.W CHARO+30 ;O
- DR.W CHARP+32 ;P
- DR.W CHARQ+34 ;Q
- DR.W CHARR+36 ;R
- DR.W CHARS+38 ;S
- DR.W CHART+40 ;T
- DR.W CHARU+42 ;U
- DR.W CHARV+44 ;V
- DR.W CHARW+46 ;W
- DR.W CHARX+48 ;X
- DR.W CHARY+50 ;Y
- DR.W CHARZ+52 ;Z
- DR.W CHK68000+54 ;_
-
- CHARA CXD.S 'AD', .AD
- CXD.S 'AN', .AN
- NOCXD
- .AD GET
- ECXDS 'D', ASSEM_CMDADD
- ECXDS 'C', ASSEM_CMDADC
- NOCXD
- .AN GET
- ECXDS 'D', ASSEM_CMDAND
- NOCXD
- CHARB CXD 'BI', .BI
- NOCXD
- .BI GET
- ECXDS 'T', ASSEM_CMDBIT
- NOCXD
- CHARC CXD.S 'CA', .CA
- ECXD 'CP', ASSEM_CMDCP
- CXD.S 'CP', .CP
- CXD.S 'CC', .CC
- NOCXD
- .CA GET
- ECXD 'LL', ASSEM_CMDCALL
- NOCXD
- .CC GET
- ECXDS 'F', ASSEM_CMDCCF
- NOCXD
- .CP GET
- ECXDS 'D', ASSEM_CMDCPD
- ECXDS 'I', ASSEM_CMDCPI
- ECXDS 'L', ASSEM_CMDCPL
- ECXD 'DR', ASSEM_CMDCPDR
- ECXD 'IR', ASSEM_CMDCPIR
- NOCXD
- CHARD CXD.S 'DA', .DA
- CXD.S 'DE', .DE
- ECXD 'DI', ASSEM_CMDDI
- CXD.S 'DJ', .DJ
- NOCXD
- .DA GET
- ECXDS 'A', ASSEM_CMDDAA
- NOCXD
- .DE GET
- ECXDS 'C', ASSEM_CMDDEC
- NOCXD
- .DJ GET
- ECXD 'NZ', ASSEM_CMDDJNZ
- NOCXD
- CHARE ECXD 'EI', ASSEM_CMDEI
- ECXD 'EX', ASSEM_CMDEX
- CXD.S 'EX', .EX
- NOCXD
- .EX GET
- ECXDS 'X', ASSEM_CMDEXX
- NOCXD
- CHARH CXD.S 'HA', .HA
- NOCXD
- .HA GET
- ECXD 'LT', ASSEM_CMDHALT
- NOCXD
- CHARI CXD.S 'IN', .IN
- ECXD 'IN', ASSEM_CMDIN
- ECXD 'IM', ASSEM_CMDIM
- NOCXD
- .IN GET
- ECXDS 'C', ASSEM_CMDINC
- ECXDS 'D', ASSEM_CMDIND
- ECXD 'DR', ASSEM_CMDINDR
- ECXDS 'I', ASSEM_CMDINI
- ECXD 'IR', ASSEM_CMDINIR
- NOCXD
- CHARJ ECXD 'JP', ASSEM_CMDJP
- ECXD 'JR', ASSEM_CMDJR
- NOCXD
- CHARK NOCXD
- CHARL ECXD 'LD', ASSEM_CMDLD
- CXD.S 'LD', .LD
- NOCXD
- .LD GET
- ECXDS 'D', ASSEM_CMDLDD
- ECXDS 'I', ASSEM_CMDLDI
- ECXD 'DR', ASSEM_CMDLDDR
- ECXD 'IR', ASSEM_CMDLDIR
- NOCXD
- CHARM NOCXD
- CHARN CXD.S 'NE', .NE
- CXD.S 'NO', .NO
- NOCXD
- .NE GET
- ECXDS 'G', ASSEM_CMDNEG
- NOCXD
- .NO GET
- ECXDS 'P', ASSEM_CMDNOP
- NOCXD
- CHARO ECXD 'OR', ASSEM_CMDOR
- CXD.S 'OT', .OT
- CXD.S 'OU', .OU
- NOCXD
- .OT GET
- ECXD 'DR', ASSEM_CMDOTDR
- ECXD 'IR', ASSEM_CMDOTIR
- NOCXD
- .OU GET
- ECXDS 'T', ASSEM_CMDOUT
- ECXD 'TD', ASSEM_CMDOUTD
- ECXD 'TI', ASSEM_CMDOUTI
- NOCXD
- CHARP CXD 'PO', .PO
- CXD 'PU', .PU
- NOCXD
- .PO GET
- ECXDS 'P', ASSEM_CMDPOP
- NOCXD
- .PU GET
- ECXD 'SH', ASSEM_CMDPUSH
- NOCXD
-
- CHARQ NOCXD
- CHARR CXD.S 'RE', .RE
- ECXD 'RL', ASSEM_CMDRL
- ECXD 'RR', ASSEM_CMDRR
- CXD.S 'RL', .RL
- CXD.S 'RR', .RR
- CXD.S 'RS', .RS
- NOCXD
- .RE GET
- ECXDS 'S', ASSEM_CMDRES
- ECXDS 'T', ASSEM_CMDRET
- ECXD 'TI', ASSEM_CMDRETI
- ECXD 'TN', ASSEM_CMDRETN
- NOCXD
- .RL GET
- ECXDS 'A', ASSEM_CMDRLA
- ECXDS 'C', ASSEM_CMDRLC
- ECXD 'CA', ASSEM_CMDRLCA
- ECXDS 'D', ASSEM_CMDRLD
- NOCXD
- .RR GET
- ECXDS 'A', ASSEM_CMDRRA
- ECXDS 'C', ASSEM_CMDRRC
- ECXD 'CA', ASSEM_CMDRRCA
- ECXDS 'D', ASSEM_CMDRRD
- NOCXD
- .RS GET
- ECXDS 'T', ASSEM_CMDRST
- NOCXD
- CHARS CXD.S 'SB', .SB
- CXD.S 'SC', .SC
- CXD.S 'SE', .SE
- CXD.S 'SL', .SL
- CXD.S 'SR', .SR
- CXD.S 'SU', .SU
- NOCXD
- .SB GET
- ECXDS 'C', ASSEM_CMDSBC
- NOCXD
- .SC GET
- ECXDS 'F', ASSEM_CMDSCF
- NOCXD
- .SE GET
- ECXDS 'T', ASSEM_CMDSET
- NOCXD
- .SL GET
- ECXDS 'A', ASSEM_CMDSLA
- NOCXD
- .SR GET
- ECXDS 'A', ASSEM_CMDSRA
- ECXDS 'L', ASSEM_CMDSRL
- NOCXD
- .SU GET
- ECXDS 'B', ASSEM_CMDSUB
- NOCXD
- CHART NOCXD
- CHARU NOCXD
- CHARV NOCXD
- CHARW NOCXD
- CHARX CXD.S 'XO', .XO
- NOCXD
- .XO GET
- ECXDS 'R', ASSEM_CMDXOR
- NOCXD
- CHARY NOCXD
- CHARZ NOCXD
-
- ASSEM_CMDADC NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- CMP.W #'HL'+$8000, D0
- BNE.S .BYTE
- BSR PARSE_GET_KOMMA
- MOVE.W #"HL"+$8000, D2
- BSR PARSE_WORDREGISTER
- ADD.B #$4A,D1
- SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVE.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- .BYTE CMP.W #"A"<<8+$8000, D0
- BNE.W ERROR_ILLEGAL_OPERAND
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$88,D1
-
- SENDBYTEREGADC SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- SENDBYTE
- .NEXT MOVE.B D1,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT SENDEND
- CXDRTS
- ASSEM_CMDADD SENDBEGIN
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'A', .BYTE
- ECXD.S 'HL', .HL
- MOVEQ #-$23, D3
- ECXD.S 'IX', .IX
- MOVEQ #-$03, D3
- ECXD.S 'IY', .IY
- BRA.W ERROR_ILLEGAL_OPERAND
- .HL BSR PARSE_GET_KOMMA
- MOVE.W #"HL"+$8000, D2
- BSR PARSE_WORDREGISTER
- BRA.S .SENDIT
- .IX MOVE.W #'IX'+$8000, D2
- BRA.S .I
- .IY MOVE.W #'IY'+$8000, D2
- .I BSR PARSE_GET_KOMMA
- BSR PARSE_WORDREGISTER
- MOVE.B D3,D3
- SENDBYTE
- .SENDIT ADD.B #$9,D1
- MOVE.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- .BYTE BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$80,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDAND BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$A0,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDBIT BSR GET_VALUE
- MOVE.L D3,D0
- AND.L #7,D0
- CMP.L D3,D0
- BNE.W ERROR_OUT_OF_RANGE_3BIT
- MOVE.B D3,-(SP)
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVE.B (SP)+,D3
- LSL.B #3,D3
- ADD.B #$40,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCALL BSR PARSE_GETFLAG
- SENDBEGIN
- ADD.B #$C4,D1
- SENDCALL MOVE.B D1,D3
- SENDBYTE
- MOVE.B D0,D3
- SENDBYTE
- ROR.W #8,D0
- MOVE.B D0,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCCF SENDBEGIN
- MOVEQ #$3F,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCP BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$B8,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDCPD SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVEQ #-$57,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCPDR SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVEQ #-$47,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCPI SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVEQ #-$5F,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCPIR SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVEQ #-$4F,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDCPL SENDBEGIN
- MOVEQ #$2F,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDDAA SENDBEGIN
- MOVEQ #$27,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDDEC BSR GETINCDEC
- SENDBEGIN
- TST.B D1
- BEQ.S .NOTHING
- MOVE.B D1,D3
- SENDBYTE
- .NOTHING MOVE.B D0,D3
- SENDBYTE
- TST.B D5
- BEQ.S .SLAM
- MOVE.B D2,D3
- SENDBYTE
- .SLAM SENDEND
- CXDRTS
- GETINCDEC MOVEQ #0, D5
- CMP.B #"(", (A6)
- BEQ .PARAN
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'A', .A
- ECXDS.S 'B', .B
- ECXD.S 'BC', .BC
- ECXDS.S 'C', .C
- ECXDS.S 'D', .D
- ECXD.S 'DE', .DE
- ECXDS.S 'E', .E
- ECXDS.S 'H', .H
- ECXD.S 'HL', .HL
- ECXD.S 'IX', .IX
- ECXD.S 'IY', .IY
- ECXDS.S 'L', .L
- ECXD.S 'SP', .SP
- ECXD.S 'HX', .HX
- ECXD.S 'HY', .HY
- ECXD.S 'LX', .LX
- ECXD.S 'LY', .LY
- BRA ERROR_ILLEGAL_OPERAND
- .A MOVEQ #$3D, D0
- BRA.S .NOEND
- .B MOVEQ #$05, D0
- BRA.S .NOEND
- .BC MOVEQ #$0B, D0
- BRA.S .NOEND
- .C MOVEQ #$0D, D0
- BRA.S .NOEND
- .D MOVEQ #$15, D0
- BRA.S .NOEND
- .DE MOVEQ #$1B, D0
- BRA.S .NOEND
- .E MOVEQ #$1D, D0
- BRA.S .NOEND
- .H MOVEQ #$25, D0
- BRA.S .NOEND
- .HL MOVEQ #$2B, D0
- .NOEND MOVEQ #0, D1
- RTS
- .IX MOVEQ #$2B, D0
- .XEND MOVEQ #-$23, D1
- RTS
- .IY MOVEQ #$2B, D0
- .YEND MOVEQ #-$03, D1
- RTS
- .L MOVEQ #$2D, D0
- BRA.S .NOEND
- .SP MOVEQ #$3B, D0
- BRA.S .NOEND
- .HX MOVEQ #$25, D0
- BRA.S .XEND
- .HY MOVEQ #$25, D0
- BRA.S .YEND
- .LX MOVEQ #$2D, D0
- BRA.S .XEND
- .LY MOVEQ #$2D, D0
- BRA.S .YEND
- .PARAN ADDQ.W #1, A6
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .AHL
- ECXD.S 'IX', .AIX
- ECXD.S 'IY', .AIY
- BRA ERROR_ILLEGAL_OPERAND
- .AHL CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- MOVEQ #$35, D0
- BRA.S .NOEND
- .AIX BSR .GETIXIY
- MOVE.B #$35, D0
- BRA.S .XEND
- .AIY BSR .GETIXIY
- MOVE.B #$35, D0
- BRA.S .YEND
- .GETIXIY MOVE.B (A6), D0
- CMP.B #"+", D0
- BEQ.S .GETVALUE
- CMP.B #"-", D0
- BNE ERROR_ILLEGAL_OPERAND
- .GETVALUE BSR GET_VALUE
- MOVE.L D3, D2
- EXT.W D2
- EXT.L D2
- CMP.L D3, D2
- BNE.W ERROR_OUT_OF_RANGE_8BIT
- CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- ST D5
- RTS
- ASSEM_CMDDI SENDBEGIN
- MOVEQ #-$0D,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDDJNZ BSR GET_VALUE
- MOVE.L D3, -(SP)
- MOVEQ #$10, D3
- BSR SENDABYTE
- MOVE.L (SP)+, D3
- BRA ASSEM_CMDJR\.SENDLORT
- ASSEM_CMDEI MOVEQ #-$05,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDEX BSR.S .0
- SENDBEGIN
- TST.B D1
- BEQ.S .1
- MOVE.B D1,D3
- SENDBYTE
- .1 MOVE.B D0,D3
- SENDBYTE
- SENDEND
- CXDRTS
- .0 CMP.B #"(", (A6)
- BEQ.S .PARA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'AF', .AF
- ECXD.S 'DE', .DE
- BRA ERROR_ILLEGAL_OPERAND
- .AF BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'AF', .AF2
- BRA ERROR_ILLEGAL_OPERAND
- .AF2 CMP.B #"'", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- MOVEQ #$08, D0
- MOVEQ #0, D1
- RTS
- .DE BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .DEHL
- BRA ERROR_ILLEGAL_OPERAND
- .DEHL MOVEQ #-$15, D0
- MOVEQ #0, D1
- RTS
- .PARA ADDQ.W #1, A6
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'SP', .SP
- BRA ERROR_ILLEGAL_OPERAND
- .SP CMP.B #")", (A6)+
- BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .HL
- ECXD.S 'IX', .IX
- ECXD.S 'IY', .IY
- BRA ERROR_ILLEGAL_OPERAND
- .HL MOVEQ #-$1D, D0
- MOVEQ #0, D1
- RTS
- .IX MOVEQ #-$1D, D0
- MOVEQ #-$23, D1
- RTS
- .IY MOVEQ #-$1D, D0
- MOVEQ #-$03, D1
- RTS
-
- ASSEM_CMDEXX MOVEQ #-$27,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDHALT MOVEQ #$76,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDIM BSR GET_VALUE
- CMP.L #2, D3
- BHI.W ERROR_MUST_0_2
- MOVE.B .TAB(PC,D3.W), D1
- BSR SEND_ED
- MOVE.B D1, D3
- BSR SENDABYTE
- CXDRTS
- .TAB DC.B $46,$56,$5E
- EVEN
- ASSEM_CMDIN BSR .GETIN
- SENDBEGIN
- MOVE.B D1, D3
- SENDBYTE
- MOVE.B D0, D3
- SENDBYTE
- SENDEND
- CXDRTS
- .GETIN NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS 'A', .A
- ECXDS 'B', .B
- ECXDS 'C', .C
- ECXDS 'D', .D
- ECXDS 'E', .E
- ECXDS 'H', .H
- ECXDS 'L', .L
- BRA ERROR_ILLEGAL_OPERAND
- .A MOVEQ #$78, D0
- MOVEQ #-$13, D1
- BRA.S .GOON1
- .B MOVEQ #$40, D0
- BRA.S .GOON
- .C MOVEQ #$48, D0
- BRA.S .GOON
- .D MOVEQ #$50, D0
- BRA.S .GOON
- .E MOVEQ #$58, D0
- BRA.S .GOON
- .H MOVEQ #$60, D0
- BRA.S .GOON
- .L MOVEQ #$68, D0
- .GOON MOVEQ #-$13, D1
- MOVEM.W D0-D1, -(SP)
- BSR PARSE_GET_KOMMA
- CMP.B #"(", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS 'C', .GOTC
- BRA ERROR_ILLEGAL_OPERAND
- .GOON1 MOVEM.W D0-D1, -(SP)
- BSR PARSE_GET_KOMMA
- CMP.B #"(", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS 'C', .GOTC
- NEXTLABEL
- CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEM.W (SP)+, D0-D1
- MOVE.L D3, D0
- MOVEQ #-$25, D1
- RTS
- .GOTC CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEM.W (SP)+, D0-D1
- RTS
- ASSEM_CMDINC BSR GETINCDEC
- SENDBEGIN
- TST.B D1
- BEQ.S .NOTHING
- MOVE.B D1,D3
- SENDBYTE
- .NOTHING MOVE.B D0,D3
- AND.B #%11,D0
- CMP.B #%11,D0
- BNE.S .SUB
- EOR.B #8,D3
- BRA.S .GOON
- .SUB SUBQ.B #1,D3
- .GOON SENDBYTE
- TST.B D5
- BEQ.S .SLAM
- MOVE.B D2,D3
- SENDBYTE
- .SLAM SENDEND
- CXDRTS
- ASSEM_CMDIND BSR.S SEND_ED
- MOVEQ #-$56,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDINDR BSR.S SEND_ED
- MOVEQ #-$46,D3
- BSR SENDABYTE
- CXDRTS
- SEND_ED MOVEQ #-$13,D3
- BSR SENDABYTE
- RTS
- ASSEM_CMDINI BSR.S SEND_ED
- MOVEQ #-$5E,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDINIR BSR.S SEND_ED
- MOVEQ #-$4E,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDJP CMP.B #"(", (A6)
- BEQ.S .PARA
- BSR PARSE_GETFLAG
- SENDBEGIN
- CMP.B #$CD-$C4,D1
- BNE.S .OK
- MOVEQ #1,D1
- .OK ADD.B #$C2,D1
- BRA SENDCALL
- .PARA ADDQ.W #1, A6
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .HL
- ECXD.S 'IX', .IX
- ECXD.S 'IY', .IY
- BRA ERROR_ILLEGAL_OPERAND
- .IX CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- MOVEQ #-$23, D3
- SENDBYTE
- BRA.S .LAST
- .HL CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- .LAST MOVEQ #-$17, D3
- SENDBYTE
- SENDEND
- CXDRTS
- .IY CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- MOVEQ #-3, D3
- SENDBYTE
- BRA.S .LAST
-
- ASSEM_CMDJR NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'C', .C
- ECXD.S 'NC', .NC
- ECXD.S 'NZ', .NZ
- ECXDS.S 'Z', .Z
- MOVEQ #$18, D3
- BSR SENDABYTE
- NEXTLABEL
- BRA.S .SENDLORT
- .AVALUE MOVE.L D3, -(SP)
- MOVEQ #$18, D3
- BSR SENDABYTE
- MOVE.L (SP)+, D3
- BRA.S .SENDLORT
- .C MOVEQ #$38, D3
- BSR SENDABYTE
- BRA.S .GETKOMMA
- .NC MOVEQ #$30, D3
- BSR SENDABYTE
- BRA.S .GETKOMMA
- .NZ MOVEQ #$20, D3
- BSR SENDABYTE
- BRA.S .GETKOMMA
- .Z MOVEQ #$28, D3
- BSR SENDABYTE
- .GETKOMMA NEXTKOMMA
- .GETLABEL BSR GET_VALUE
- .SENDLORT BSR GET_ADDR D1-D2 ARE KILLED
- TST.W D7
- BMI.S .PASS1
- SUB.L D0, D3
- SUBQ.W #1, D3
- MOVE.W D3, D0
- EXT.W D0
- EXT.L D0
- CMP.L D0, D3
- BNE.W ERROR_OUT_OF_RANGE_8BIT
- .PASS1 BSR SENDABYTE
- CXDRTS
- SENDABYTE SENDBEGIN
- SENDBYTE
- SENDEND
- RTS
-
- ASSEM_CMDLD BSR .0
- SENDBEGIN
- MOVE.W D3,-(SP)
- TST.B D2
- BEQ.S .NOTHING
- MOVE.B D2,D3
- SENDBYTE
- .NOTHING MOVE.B D1,D3
- SENDBYTE
- TST.B D6
- BEQ.S .NOTD6
- MOVE.B D0,D3
- SENDBYTE
- .NOTD6 MOVE.W (SP)+,D3
- TST.B D5
- BEQ.S .NOTD5
- SENDBYTE
- .NOTD5 SENDEND
- CXDRTS
-
- .0 MOVEQ #0, D5
- MOVEQ #0, D6
- CMP.B #"(", (A6)
- BEQ.W .PARA
- BSR GETFIRSTWORD
- ECXDS.S 'A', .LDA
- ECXDS.S 'B', .LDB
- ECXD 'BC', .LDBC
- ECXDS 'C', .LDC
- ECXDS 'D', .LDD
- ECXD 'DE', .LDDE
- ECXDS 'E', .LDE
- ECXDS 'H', .LDH
- ECXD 'HL', .LDHL
- ECXDS 'I', .LDI
- ECXD 'IX', .LDIX
- ECXD 'IY', .LDIY
- ECXDS 'L', .LDL
- ECXDS 'R', .LDR
- ECXD 'SP', .LDSP
- BRA ERROR_ILLEGAL_OPERAND
- .LDA BSR PARSE_GET_KOMMA
- BSR PARSE_LDABYTE
- EOR.B #$78, D1
- RTS
- .LDB BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$40, D1
- RTS
- .LDBC BSR GETAWORDVALUE
- ST D6
- TST.B D5
- BNE.S .LDBCP
- ST D5
- MOVEQ #$01, D1
- MOVEQ #0, D2
- RTS
- .LDBCP MOVEQ #$4B, D1
- MOVEQ #-$13, D2
- RTS
- .LDC BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$48, D1
- RTS
- .LDD BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$50, D1
- RTS
- .LDDE BSR GETAWORDVALUE
- ST D6
- TST.B D5
- BNE.S .LDDEP
- ST D5
- MOVEQ #$11, D1
- MOVEQ #0, D2
- RTS
- .LDDEP MOVEQ #$5B, D1
- MOVEQ #-$13, D2
- RTS
- .LDE BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$58, D1
- RTS
- .LDH BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$60, D1
- RTS
- .LDHL BSR GETAWORDVALUE
- ST D6
- TST.B D5
- BNE.S .LDHLP
- ST D5
- MOVEQ #$21, D1
- MOVEQ #0, D2
- RTS
- .LDHLP MOVEQ #$2A, D1
- MOVEQ #0, D2
- RTS
- .LDI BSR CHECKA
- MOVEQ #-$13, D2
- MOVEQ #$47, D1
- RTS
- .LDIX BSR .LDHL
- MOVEQ #-$23, D2
- RTS
- .LDIY BSR .LDHL
- MOVEQ #-$03, D2
- RTS
-
- .LDL BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- EOR.B #$68, D1
- RTS
- .LDR BSR CHECKA
- MOVEQ #-$13, D2
- MOVEQ #$4F, D1
- RTS
- .LDSP BSR PARSE_GET_KOMMA
- CMP.B #"(", (A6)
- BEQ.S .LDSPP
- NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .LDSPVAL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .LDSPHL
- ECXD.S 'IX', .LDSPIX
- ECXD.S 'IY', .LDSPIY
- NEXTLABEL
- .LDSPVAL MOVE.L D3, D0
- AND.L #$FFFF, D0
- CMP.L D3, D0
- BNE.W ERROR_OUT_OF_RANGE_16BIT
- LSR.W #8, D3
- MOVEQ #$31, D1
- MOVEQ #0, D2
- ST D5
- ST D6
- RTS
- .LDSPP ADDQ.W #1, A6
- BSR GET_VALUE
- BSR.S .LDSPVAL
- CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- MOVEQ #$7B, D1
- MOVEQ #-$13, D2
- RTS
- .LDSPHL MOVEQ #-7, D1
- MOVEQ #0, D2
- RTS
- .LDSPIX MOVEQ #-7, D1
- MOVEQ #-$23, D2
- RTS
- .LDSPIY MOVEQ #-7, D1
- MOVEQ #-$03, D2
- RTS
-
- .PARA ADDQ.W #1, A6
- NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- ECXD 'BC', .BC
- ECXD 'DE', .DE
- ECXD 'HL', .HL
- ECXD 'IX', .IX
- ECXD 'IY', .IY
- NEXTLABEL
- BRA.s .AVALUE1
- .AVALUE GETLABEL
- .AVALUE1 CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- MOVE.L D3, D0
- AND.L #$FFFF, D0
- CMP.L D3, D0
- BNE.W ERROR_OUT_OF_RANGE_16BIT
- LSR.W #8, D3
- MOVE.W D0, -(SP)
- ST D5
- ST D6
- BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'A', .NNA
- ECXD.S 'BC', .NNBC
- ECXD.S 'DE', .NNDE
- ECXD.S 'HL', .NNHL
- ECXD.S 'IX', .NNIX
- ECXD.S 'IY', .NNIY
- ECXD.S 'SP', .NNSP
- BRA ERROR_ILLEGAL_OPERAND
- .NNA MOVEQ #0, D2
- MOVEQ #$32, D1
- MOVE.W (SP)+, D0
- RTS
- .NNBC MOVEQ #-$13, D2
- MOVEQ #$43, D1
- MOVE.W (SP)+, D0
- RTS
- .NNDE MOVEQ #-$13, D2
- MOVEQ #$53, D1
- MOVE.W (SP)+, D0
- RTS
- .NNHL MOVEQ #0, D2
- MOVEQ #$22, D1
- MOVE.W (SP)+, D0
- RTS
- .NNIX MOVEQ #-$23, D2
- MOVEQ #$22, D1
- MOVE.W (SP)+, D0
- RTS
- .NNIY MOVEQ #-$03, D2
- MOVEQ #$22, D1
- MOVE.W (SP)+, D0
- RTS
- .NNSP MOVEQ #-$13, D2
- MOVEQ #$73, D1
- MOVE.W (SP)+, D0
- RTS
- .BC CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- BSR.W CHECKA
- MOVEQ #$02, D1
- RTS
- .DE CMP.B #")", (A6)+
- BNE ERROR_ILLEGAL_OPERAND
- BSR.W CHECKA
- MOVEQ #$12, D1
- RTS
- .HL CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #6, D1
- BEQ ERROR_ILLEGAL_OPERAND
- EOR.B #$70, D1
- RTS
- .IY BSR.S .IX
- MOVEQ #-$03, D2
- RTS
- .IX MOVE.B (A6), D0
- CMP.B #"+", D0
- BEQ.S .IX1
- CMP.B #"-", D0
- BNE.W ERROR_ILLEGAL_OPERAND
- .IX1 BSR GET_VALUE
- CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVE.L D3, D0
- EXT.W D0
- EXT.L D0
- CMP.L D0, D3
- BNE.W ERROR_OUT_OF_RANGE_8BIT
- MOVE.W D0, -(SP)
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #6, D1
- BEQ ERROR_ILLEGAL_OPERAND
- MOVE.W (SP)+, D0
- ST D6
- MOVE.B #$DD, D2
- EOR.B #$70, D1
- RTS
-
- CHECKA BSR GETNEXTWORD
- CMP.W #"A"<<8+$8000, D0
- BNE.W ERROR_ILLEGAL_OPERAND
- RTS
-
- GETAWORDVALUE BSR PARSE_GET_KOMMA
- MOVEQ #0, D5
- CMP.B #"(", (A6)
- BNE.S .GETVAL
- ADDQ.W #1, A6
- BSR.S .GETVAL
- CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEQ #-1, D5
- RTS
- .GETVAL BSR GET_VALUE
- MOVE.L D3, D0
- AND.L #$FFFF, D0
- CMP.L D3, D0
- BNE.W ERROR_OUT_OF_RANGE_16BIT
- LSR.W #8, D3
- RTS
- ;D0=I STEP
- ;D1=COMMAND
- ;D2=$DD,$FD
- ;D3=COMMAND VAL
-
- ;A=7
- ;B=0,0
- ;C=1,0
- ;D=2,0
- ;E=3,0
- ;H=4,0
- ;HX=4,$DD
- ;HY=4,$FD
- ;L=5,0
- ;LX=5,$DD
- ;LY=5,$FD
- ;(HL)=6,0
- ;(IX,N)=6,$DD,#
- ;(IY,N)=6,$FD,#
- ;#=$46
-
- GETNEXTWORD BSR PARSE_GET_KOMMA
- GETFIRSTWORD NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- RTS
- ASSEM_CMDLDD BSR SEND_ED
- MOVEQ #-$58, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDLDDR BSR SEND_ED
- MOVEQ #-$48, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDLDI BSR SEND_ED
- MOVEQ #-$60, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDLDIR BSR SEND_ED
- MOVEQ #-$50, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDNEG BSR SEND_ED
- MOVEQ #$44, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDNOP MOVEQ #$00, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDOR BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$B0,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDOTDR BSR SEND_ED
- MOVEQ #-$78, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDOTIR BSR SEND_ED
- MOVEQ #-$7D, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDOUT BSR .GETOUT
- SENDBEGIN
- MOVE.B D1, D3
- SENDBYTE
- MOVE.B D0, D3
- SENDBYTE
- SENDEND
- CXDRTS
-
- .GETOUT CMP.B #"(", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS 'C', .GOTC
- NEXTLABEL
- MOVE.L D3, D0
- MOVE.W D0, -(SP)
- CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- CMP.W #'A'<<8+$8000, D0
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVE.W (SP)+, D0
- MOVEQ #-$2D, D1
- RTS
- .GOTC CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS 'A', .A
- ECXDS 'B', .B
- ECXDS 'C', .C
- ECXDS 'D', .D
- ECXDS 'E', .E
- ECXDS 'H', .H
- ECXDS 'L', .L
- BRA ERROR_ILLEGAL_OPERAND
- .A MOVEQ #$79, D0
- MOVEQ #-$13, D1
- RTS
- .B MOVEQ #$41, D0
- MOVEQ #-$13, D1
- RTS
- .C MOVEQ #$49, D0
- MOVEQ #-$13, D1
- RTS
- .D MOVEQ #$51, D0
- MOVEQ #-$13, D1
- RTS
- .E MOVEQ #$59, D0
- MOVEQ #-$13, D1
- RTS
- .H MOVEQ #$61, D0
- MOVEQ #-$13, D1
- RTS
- .L MOVEQ #$69, D0
- MOVEQ #-$13, D1
- RTS
-
- ASSEM_CMDOUTD BSR SEND_ED
- MOVEQ #-$55, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDOUTI BSR SEND_ED
- MOVEQ #-$5D, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDPOP BSR GETPUSHPOP
- TST.B D1
- BEQ.S .0
- MOVE.B D1,D3
- BSR SENDABYTE
- .0 MOVE.B D0,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDPUSH BSR GETPUSHPOP
- TST.B D1
- BEQ.S .0
- MOVE.B D1,D3
- BSR SENDABYTE
- .0 ADDQ.B #4,D0
- MOVE.B D0,D3
- BSR SENDABYTE
- CXDRTS
- GETPUSHPOP NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD 'AF', .AF
- ECXD 'BC', .BC
- ECXD 'DE', .DE
- ECXD 'HL', .HL
- ECXD 'IX', .IX
- ECXD 'IY', .IY
- BRA ERROR_ILLEGAL_OPERAND
- .AF MOVEQ #-$0F, D0
- MOVEQ #0, D1
- RTS
- .BC MOVE.W #-$3F, D0
- MOVEQ #0, D1
- RTS
- .DE MOVE.W #-$2F, D0
- MOVEQ #0, D1
- RTS
- .HL MOVE.W #-$1F, D0
- MOVEQ #0, D1
- RTS
- .IX MOVE.W #-$1F, D0
- MOVEQ #-$23, D1
- RTS
- .IY MOVE.W #-$1F, D0
- MOVEQ #-$03, D1
- RTS
- ASSEM_CMDRES BSR GET_VALUE
- MOVE.L D3,D0
- AND.L #7,D0
- CMP.L D3,D0
- BNE.W ERROR_OUT_OF_RANGE_3BIT
- MOVE.B D3,-(SP)
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVE.B (SP)+,D3
- LSL.B #3,D3
- ADD.B #$80,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDRET BSR .GETIT
- BSR SENDABYTE
- CXDRTS
- .GETIT TST.B (A6)
- BEQ.S .NOTHING
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'C', .C
- ECXDS.S 'M', .M
- ECXD.S 'NC', .NC
- ECXD.S 'NZ', .NZ
- ECXDS.S 'P', .P
- ECXD.S 'PE', .PE
- ECXD.S 'PO', .PO
- ECXDS.S 'Z', .Z
- .NOTHING MOVE.W #$C9, D3
- RTS
- .C MOVE.W #$D8, D3
- RTS
- .M MOVE.W #$F8, D3
- RTS
- .NC MOVE.W #$D0, D3
- RTS
- .NZ MOVE.W #$C0, D3
- RTS
- .P MOVE.W #$F0, D3
- RTS
- .PE MOVE.W #$E8, D3
- RTS
- .PO MOVE.W #$E0, D3
- RTS
- .Z MOVE.W #$C8, D3
- RTS
- ASSEM_CMDRETI BSR SEND_ED
- MOVEQ #$4D,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDRETN BSR SEND_ED
- MOVEQ #$45,D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDRL BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$10,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDRLA MOVEQ #$17, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRLC BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVE.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDRLCA MOVEQ #$07, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRLD BSR SEND_ED
- MOVEQ #$6F, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRR BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$18,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDRRA MOVEQ #$1F, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRRC BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$08,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDRRCA MOVEQ #$0F, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRRD BSR SEND_ED
- MOVEQ #$67, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDRST BSR GET_VALUE
- MOVE.L D3, D0
- AND.L #$38, D0
- CMP.L D3, D0
- BNE.W ERROR_MUST_BE_AND38
- ADD.B #$C7, D3
- BSR SENDABYTE
- CXDRTS
- ASSEM_CMDSCF MOVEQ #$37, D3
- BSR.W SENDABYTE
- CXDRTS
- ASSEM_CMDSBC NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- CMP.W #'HL'+$8000, D0
- BNE.S .BYTE
- BSR PARSE_GET_KOMMA
- MOVE.W #"HL"+$8000, D2
- BSR PARSE_WORDREGISTER
- ADD.B #$42,D1
- SENDBEGIN
- MOVEQ #-$13,D3
- SENDBYTE
- MOVE.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- .BYTE CMP.W #"A"<<8+$8000, D0
- BNE.W ERROR_ILLEGAL_OPERAND
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$98,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDSET BSR GET_VALUE
- MOVE.L D3,D0
- AND.L #7,D0
- CMP.L D3,D0
- BNE.W ERROR_OUT_OF_RANGE_3BIT
- MOVE.B D3,-(SP)
- BSR PARSE_GET_KOMMA
- BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVE.B (SP)+,D3
- LSL.B #3,D3
- ADD.B #$C0,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDSLA BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$20,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDSRA BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$28,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDSRL BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHS.W ERROR_ILLEGAL_OPERAND
- SENDBEGIN
- TST.B D2
- BEQ.S .NEXT
- MOVE.B D2,D3
- TST.B D5
- BEQ.W ERROR_ILLEGAL_OPERAND
- SENDBYTE
- .NEXT MOVE.B #-$35,D3
- SENDBYTE
- TST.B D5
- BEQ.S .NOEXT
- MOVE.B D0,D3
- SENDBYTE
- .NOEXT MOVEQ #$38,D3
- ADD.B D1,D3
- SENDBYTE
- SENDEND
- CXDRTS
- ASSEM_CMDSUB BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$90,D1
- BRA.W SENDBYTEREGADC
- ASSEM_CMDXOR BSR PARSE_BYTEREGISTER
- CMP.B #$46,D1
- BHI.W ERROR_ILLEGAL_OPERAND
- ADD.B #$A8,D1
- BRA.W SENDBYTEREGADC
-
-
- PARSE_GETFLAG NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'C', .C
- ECXDS.S 'M', .M
- ECXD.S 'NC', .NC
- ECXD.S 'NZ', .NZ
- ECXDS.S 'P', .P
- ECXD.S 'PE', .PE
- ECXD.S 'PO', .PO
- ECXDS.S 'Z', .Z
- MOVE.W #$CD-$C4, -(SP)
- .GET_LABEL2 NEXTSYMBOLBUFFER A3
- NEXTLABEL
- MOVE.W (SP)+, D1
- .0 TST.W D2
- BNE.W ERROR_RELATIVE_MODE
- MOVE.L D3,D0
- AND.L #$FFFF,D0
- CMP.L D3,D0
- BNE.W ERROR_OUT_OF_RANGE_16BIT
- RTS
- .AVALUE GETLABEL
- MOVE.W #$CD-$C4, D1
- BRA.S .0
- .C MOVE.W #$DC-$C4, -(SP)
- BRA.S .GET_LABEL
- .M MOVE.W #$FC-$C4, -(SP)
- BRA.S .GET_LABEL
- .NC MOVE.W #$D4-$C4, -(SP)
- BRA.S .GET_LABEL
- .NZ MOVE.W #$C4-$C4, -(SP)
- BRA.S .GET_LABEL
- .P MOVE.W #$F4-$C4, -(SP)
- BRA.S .GET_LABEL
- .PE MOVE.W #$EC-$C4, -(SP)
- BRA.S .GET_LABEL
- .PO MOVE.W #$E4-$C4, -(SP)
- BRA.S .GET_LABEL
- .Z MOVE.W #$CC-$C4, -(SP)
- .GET_LABEL BSR PARSE_GET_KOMMA
- NEXTSYMBOL
- BRA.S .GET_LABEL2
-
- ;A=7
- ;B=0,0
- ;C=1,0
- ;D=2,0
- ;E=3,0
- ;H=4,0
- ;HX=4,$DD
- ;HY=4,$FD
- ;L=5,0
- ;LX=5,$DD
- ;LY=5,$FD
- ;(HL)=6,0
- ;(IX,N)=6,$DD,#
- ;(IY,N)=6,$FD,#
- ;#=$46
-
- PARSE_WORDREGISTER
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- CMP.W D2, D0
- BNE.S .B
- MOVEQ #$20, D1
- RTS
- .B CMP.W #"BC"+$8000, D0
- BNE.S .D
- MOVEQ #$00, D1
- RTS
- .D CMP.W #"DE"+$8000, D0
- BNE.S .S
- MOVEQ #$10, D1
- RTS
- .S CMP.W #"SP"+$8000, D0
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEQ #$30, D1
- RTS
-
- PARSE_LDABYTE CMP.B #"(", (A6)
- BEQ.S .GOTPARAN
- NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.W PARSE_BYTEREGISTER\.AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- ECXDS.S 'I', .I
- ECXDS.S 'R', .R
- BRA.W PARSE_BYTEREGISTER\.000
- .I MOVEQ #$78~$57, D1
- MOVEQ #-$13, D2
- MOVEQ #0, D5
- RTS
- .R MOVEQ #$78~$5F, D1
- MOVEQ #-$13, D2
- MOVEQ #0, D5
- RTS
- .GOTPARAN ADDQ.W #1, A6
- NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'BC', .BC
- ECXD.S 'DE', .DE
- ECXD 'HL', PARSE_BYTEREGISTER\.HL
- MOVEQ #-$23, D2
- ECXD 'IX', PARSE_BYTEREGISTER\.I
- MOVEQ #-$03, D2
- ECXD 'IY', PARSE_BYTEREGISTER\.I
- NEXTLABEL
- BRA.s .AVALUE1
- .AVALUE GETLABEL
- .AVALUE1 CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVE.L D3, D0
- AND.L #$FFFF, D0
- CMP.L D3, D0
- BNE ERROR_OUT_OF_RANGE_16BIT
- LSR.W #8, D3
- ST D5
- ST D6
- MOVEQ #$3A~$78, D1
- MOVEQ #0, D2
- RTS
- .BC CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEQ #$A~$78, D1
- MOVEQ #0, D2
- MOVEQ #0, D5
- RTS
- .DE CMP.B #")", (A6)+
- BNE.W ERROR_ILLEGAL_OPERAND
- MOVEQ #$1A~$78, D1
- MOVEQ #0, D2
- MOVEQ #0, D5
- RTS
-
- PARSE_BYTEREGISTER
- CMP.B #"(", (A6)
- BEQ.W .GOTPARAN
- NEXTSYMBOL
- CMP.B #NS_ALABEL, D1
- BNE.S .AVALUE
- NEXTSYMBOLBUFFER A3
- GET
- .000 ECXDS "A", .A
- ECXDS "B", .B
- ECXDS "C", .C
- ECXDS "D", .D
- ECXDS "E", .E
- ECXDS "H", .H
- ECXDS "L", .L
- ECXD "HX", .HX
- ECXD "LX", .LX
- ECXD "HY", .HY
- ECXD "LY", .LY
- NEXTLABEL
- BRA.S .AVALUE1
- .AVALUE GETLABEL
- .AVALUE1 TST.W D2
- BNE.W ERROR_RELATIVE_MODE
- MOVE.L D3, D0
- AND.L #$FF, D0
- CMP.L D3, D0
- BNE.W ERROR_OUT_OF_RANGE_8BIT
- MOVEQ #$46, D1
- MOVEQ #0, D2
- ST D5
- RTS
- .A MOVEQ #7, D1
- .LIM MOVEQ #0, D2
- MOVEQ #0, D5
- RTS
- .B MOVEQ #0, D1
- BRA.S .LIM
- .C MOVEQ #1, D1
- BRA.S .LIM
- .D MOVEQ #2, D1
- BRA.S .LIM
- .E MOVEQ #3, D1
- BRA.S .LIM
- .H MOVEQ #4, D1
- BRA.S .LIM
- .L MOVEQ #5, D1
- BRA.S .LIM
- .HX MOVEQ #4, D1
- MOVEQ #-$23, D2
- MOVEQ #0, D5
- RTS
- .LX MOVEQ #5, D1
- MOVEQ #-$23, D2
- MOVEQ #0, D5
- RTS
- .HY MOVEQ #4, D1
- MOVEQ #-$3, D2
- MOVEQ #0, D5
- RTS
- .LY MOVEQ #5, D1
- MOVEQ #-$3, D2
- MOVEQ #0, D5
- RTS
- .GOTPARAN ADDQ.W #1, A6
- NEXTSYMBOL
- NEXTSYMBOLBUFFER A3
- GET
- ECXD.S 'HL', .HL
- MOVEQ #-$23, D2
- ECXD.S 'IX', .I
- MOVEQ #-$03, D2
- ECXD.S 'IY', .I
- BRA.S ERROR_ILLEGAL_OPERAND
- .HL CMP.B #")", (A6)+
- BNE.S ERROR_ILLEGAL_OPERAND
- MOVEQ #6, D1
- BRA.S .LIM
- .I MOVE.B (A6), D0
- CMP.B #"-", D0
- BEQ.S .MINUS
- CMP.B #"+", D0
- BNE.S ERROR_ILLEGAL_OPERAND
- .MINUS MOVE.W D2,-(SP)
- BSR GET_VALUE
- TST.W D2
- BNE.W ERROR_RELATIVE_MODE
- MOVE.W (SP)+,D2
- MOVE.B D3, D0
- EXT.W D0
- EXT.L D0
- CMP.L D3, D0
- BNE.S ERROR_OUT_OF_RANGE_8BIT
- CMP.B #")", (A6)+
- BNE.W ERROR_PARENTES_EXPECTED
- ST D5
- MOVEQ #6, D1
- RTS
-
- ERROR_ILLEGAL_OPERAND
- ERROR "Illegal operand"
- ERROR_OUT_OF_RANGE_3BIT
- ERROR "Out of 3 bit range"
- ERROR_OUT_OF_RANGE_8BIT
- ERROR "Out of 8 bit range"
- ERROR_OUT_OF_RANGE_16BIT
- ERROR "Out of 16 bit range"
- ERROR_PARENTES_EXPECTED
- ERROR "Right parenthes expected"
- ERROR_RELATIVE_MODE
- ERROR "Relative Mode Error"
- ERROR_MUST_0_2 ERROR "Must be a value between 0-2"
- ERROR_MUST_BE_AND38
- ERROR "Must be andable with 38"
- DISASM RTS
-
- ENDOFASM
-